// Dynamic2dArray.h : interface of the CDynamic2dArray template class


#ifndef DYNAMIC_2D_ARRAY_H
#define DYNAMIC_2D_ARRAY_H

// disable warning C4786: symbol greater than 255 character,
// okay to ignore this warning
#pragma warning(disable: 4786)

#include <vector>


// Vytvorim dvojrozmerne dynamicke pole ako sablonu, aby mohlo byt naplnene lubovolnymi objektami
// Vsetky funkcie su inline, pre rychlejsie a efektivnejsie vykonanie
// Definujem svoj operator [], pre pristup k jednotlivym prvkom pola
//   napr. CDynamic2dArray<int> a(3, 3); a[1][1] = 2;
// Funkcia Resize(rows, cols) zmeni povodne pole na (rows x cols)
  
template <typename T> class CDynamic2dArray
{

	// vektor vo vektore => 2D pole
	std::vector<std::vector<T> > data;

public:
	// Default konstruktor
	CDynamic2dArray()
	{
	
	}					
	
	// Konstruktor dynamickeho pola (riadky x stlpce)
	CDynamic2dArray(int rows, int cols)
	{
		for(int i=0; i < rows; i++)
			data.push_back(std::vector<T>(cols));
	}

	// OPERATORY

	inline		 std::vector<T> & operator[](int i)
	{ 
		return data[i];
	}
	
	inline const std::vector<T> & operator[](int i) const
	{
		return data[i];
	}

	// DALSIE FUNKCIE
	
	// Zmeni velkost dynamickeho pola
	void Resize(int rows, int cols)
	{
		data.resize(rows);
		for(int i=0; i < rows; ++i)
			data[i].resize(cols,0);
	}
};	

#endif // DYNAMIC_2D_ARRAY_H
